package paginas;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.WindowFocusListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

import modelUtil.Configuracion;
import plantilla.PlantillaTO;
import usuario.usuarioTO.UsuarioTO;
import util.BotonPersonalizado;
import util.PanelBotonEliminado;
import util.PopUpCambioNombreTeclado;
import util.PopUpSeleccionCeldasTeclado;
import util.PopUpSeleccionDimensionTeclado;
import util.PopUpSeleccionPosicionTeclado;
import util.TecladoPreview;
import util.TransicionBotones;
import AccionBoton.AccionCerrarEditor;
import AccionBoton.AccionEstirarVentana;
import AccionBoton.AccionFocoVentana;
import fachadaPlantilla.delegate.PlantillaFacade;
import fachadaUsuario.delegate.UsuarioFacade;

public class PaginaEntornoCreacionTeclados extends JFrame{

	private static final long serialVersionUID = 1;
	private JTabbedPane _menubarra;
	private JPanel _panelBotones = new JPanel();
	private PaginaEntornoCreacion _frame;
	private String _teclado;
	private String _usuario;
	private PlantillaTO tecladoTO;
	private PlantillaFacade fachada = new PlantillaFacade();
	private UsuarioFacade fachadaUser = new UsuarioFacade();
	private PopUpCambioNombreTeclado cambioNombre;
	private PopUpSeleccionCeldasTeclado seleccionCeldas;
	private PopUpSeleccionDimensionTeclado seleccionDimension;
	private PopUpSeleccionPosicionTeclado seleccionPosicion;
	private Boolean visibleCambioNombre = false;
	private Boolean visibleSeleccionCeldas = true;
	private Boolean visibleSeleccionDimension = false;
	private Boolean visibleSeleccionPosicion = true;
	private JFrame _tecladoPrevisualizado = new JFrame();
	private UsuarioTO usuarioTO;
	private String tBarrido;
	private Boolean barrido;
	private BotonPersonalizado botonseleccionado;
	private BotonPersonalizado botonCopiar;
	private BotonPersonalizado botonCortar;
	private TecladoPreview teclado;
	private List<PanelBotonEliminado> botonesEliminados = new ArrayList<PanelBotonEliminado>();
	private PanelBotonEliminado panelSeleccionado;
	private JPanel tab2,tab3,tab4;
	private EditorTecladosTab1 tab1;
	private TransicionBotones policy;
	private Boolean Guardado = true;
	private WindowFocusListener foco;
	private Vector<Component> order;


	
    public PaginaEntornoCreacionTeclados(JList lista, JList lista2, PaginaEntornoCreacion frame) {

    	
    	_usuario = lista2.getSelectedValue().toString();
    	_teclado = fachada.GetDir(new File(Configuracion.instancia().getDirUsuarios() + _usuario), lista.getSelectedValue().toString());

    	Configuracion.instancia().setTecladoActual(_teclado);
    	tecladoTO = fachada.RecuperarPlantilla(Configuracion.instancia().getDirUsuarios() + _usuario + "//" + _teclado);
    	usuarioTO = fachadaUser.BuscarUsuario(_usuario);
    	_frame = frame;
    	this.addComponentListener(new AccionCerrarEditor(this));
    	if(usuarioTO.getBarrido().equals("Si")){
    		barrido = true;
    	}else{
    		
    		barrido = false;
    	}
    	
    	if(!usuarioTO.getTiempoBarrido().equals("")){
    		tBarrido = usuarioTO.getTiempoBarrido();

    	}else{
    		
    		tBarrido = "0";
    	}
    	if(!barrido)tBarrido = "0";
    	barrido = false;
        initComponents();

        _frame.setVisible(false);
        order = new Vector<Component>(4);
        order.add(_menubarra);
        order.add(tab1);
        order.add(tab2);
        order.add(tab3);
        order.add(tab4);
        foco = new AccionFocoVentana(tab1);
        _frame.addWindowFocusListener(foco);
       _frame.setFocusable(true);
       policy = new TransicionBotones(order);
       _frame.setFocusTraversalPolicy(policy);
        
        //this.setFocusableWindowState(false);

        
    	seleccionPosicion = new PopUpSeleccionPosicionTeclado(this);
    	seleccionPosicion.setVisible(visibleSeleccionPosicion);
    	seleccionCeldas = new PopUpSeleccionCeldasTeclado(this);
    	seleccionCeldas.setVisible(visibleSeleccionCeldas);
    	cambioNombre = new PopUpCambioNombreTeclado(_teclado,this);
    	cambioNombre.setVisible(visibleCambioNombre);
    	seleccionDimension = new PopUpSeleccionDimensionTeclado(tecladoTO.getAnchoTeclado(), tecladoTO.getAltoTeclado(),this);
    	seleccionDimension.setVisible(visibleSeleccionDimension);
    	//teclado = new TecladoPreview(_tecladoPrevisualizado, this.getTecladoTO(), barrido, new Integer(tBarrido), false,this,botonesEliminados);
    	_tecladoPrevisualizado.addComponentListener(new AccionEstirarVentana(this));
    	teclado = new TecladoPreview(_tecladoPrevisualizado, this.getTecladoTO(), barrido, new Integer(tBarrido), false,this);

    	_tecladoPrevisualizado.setAlwaysOnTop(true);
    	//_tecladoPrevisualizado.setFocusable(true);
    	_tecladoPrevisualizado.setVisible(true);

        this.setVisible(true);
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
        this.repaint();


    }
	
	
    private void initComponents() {
    	GridBagLayout grid = new GridBagLayout();
    	GridBagConstraints cons = new GridBagConstraints();
    	cons.gridheight = 1;
    	cons.gridwidth = 1;
    	cons.gridx = 0;
    	cons.gridy = 0;
    	this.setLayout(grid);
    	
    	crearCuerpoVentana();
    	crearMenuBarra();
    	grid.addLayoutComponent(_menubarra, cons);
    	this.add(_menubarra);
    	cons.gridy=1;
    	grid.addLayoutComponent(_panelBotones, cons);
    	this.add(_panelBotones);
    	    	
    	this.pack();
        this.repaint();
    }
	
	
	
    public void crearMenuBarra(){
    	

    	Toolkit t = Toolkit.getDefaultToolkit();
    	Double anchura = t.getScreenSize().getWidth();
    	
    	_menubarra = new JTabbedPane();
    	_menubarra.setPreferredSize(new Dimension(anchura.intValue()-10,80));
    	_menubarra.setLocation(new Point(0, 50));
    	tab1 = new EditorTecladosTab1(this);
    	tab2 = new EditorTecladosTab2(this);
    	tab3 =  new EditorTecladosTab3(this);
    	tab4 = new EditorTecladosTab4(this);
    	tab1.setFocusable(true);
    	tab2.setFocusable(true);
    	tab3.setFocusable(true);
    	tab4.setFocusable(true);
    	_menubarra.addTab(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_menu_creacion_teclados_archivo"),tab1) ;
    	_menubarra.addTab(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_menu_creacion_teclados_configurar_teclado"), tab2);
    	_menubarra.addTab(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_menu_creacion_teclados_configurar_boton"),tab3);
    	_menubarra.addTab(ResourceBundle.getBundle("internacionalizacion/Etiquetas").getString("etiqueta_popup_admin_ayuda"), tab4);
    	_menubarra.repaint();


    }
	
    public void crearCuerpoVentana(){
    	
    	Toolkit t = Toolkit.getDefaultToolkit();
    	Double altura = t.getScreenSize().getHeight();
    	Double anchura = t.getScreenSize().getWidth();
    	

    	_panelBotones.setPreferredSize(new Dimension(anchura.intValue()-10,altura.intValue()-180));
        _tecladoPrevisualizado.setFocusableWindowState(false);

    	
    }


	public PlantillaTO getTecladoTO() {
		return tecladoTO;
	}


	public void setTecladoTO(PlantillaTO tecladoTO) {
		this.tecladoTO = tecladoTO;
    	teclado = new TecladoPreview(_tecladoPrevisualizado, this.getTecladoTO(), barrido, new Integer(tBarrido), false,this,botonesEliminados);
    	setVisibleSeleccionPosicion(false);
    	setVisibleSeleccionPosicion(true);
	}


	public String get_teclado() {
		return _teclado;
	}


	public void set_teclado(String teclado) {
		_teclado = teclado;
	}


	public String get_usuario() {
		return _usuario;
	}


	public void set_usuario(String usuario) {
		_usuario = usuario;
	}
    
    public void dispose(){
    	
    	cambioNombre.dispose();
    	seleccionCeldas.dispose();
    	seleccionDimension.dispose();
    	seleccionPosicion.dispose();
    	_tecladoPrevisualizado.dispose();
    	super.dispose();
    }


	public PopUpCambioNombreTeclado getCambioNombre() {
		return cambioNombre;
	}


	public void setCambioNombre(PopUpCambioNombreTeclado cambioNombre) {
		this.cambioNombre = cambioNombre;
	}


	public PopUpSeleccionCeldasTeclado getSeleccionCeldas() {
		return seleccionCeldas;
	}


	public void setSeleccionCeldas(PopUpSeleccionCeldasTeclado seleccionCeldas) {
		this.seleccionCeldas = seleccionCeldas;
	}


	public PopUpSeleccionDimensionTeclado getSeleccionDimension() {
		return seleccionDimension;
	}


	public void setSeleccionDimension(
			PopUpSeleccionDimensionTeclado seleccionDimension) {
		this.seleccionDimension = seleccionDimension;
	}


	public PopUpSeleccionPosicionTeclado getSeleccionPosicion() {
		return seleccionPosicion;
	}


	public void setSeleccionPosicion(PopUpSeleccionPosicionTeclado seleccionPosicion) {
		this.seleccionPosicion = seleccionPosicion;
	}


	public Boolean getVisibleCambioNombre() {
		return visibleCambioNombre;
	}


	public void setVisibleCambioNombre(Boolean visibleCambioNombre) {
		this.visibleCambioNombre = visibleCambioNombre;

	}


	public Boolean getVisibleSeleccionCeldas() {
		return visibleSeleccionCeldas;
	}


	public void setVisibleSeleccionCeldas(Boolean visibleSeleccionCeldas) {

		this.visibleSeleccionCeldas = visibleSeleccionCeldas;

	}


	public Boolean getVisibleSeleccionDimension() {
		return visibleSeleccionDimension;
	}


	public void setVisibleSeleccionDimension(Boolean visibleSeleccionDimension) {
		this.visibleSeleccionDimension = visibleSeleccionDimension;
	}


	public Boolean getVisibleSeleccionPosicion() {
		return visibleSeleccionPosicion;
	}


	public void setVisibleSeleccionPosicion(Boolean visibleSeleccionPosicion) {
		this.visibleSeleccionPosicion = visibleSeleccionPosicion;
	}


	public BotonPersonalizado getBotonseleccionado() {
		return botonseleccionado;
	}


	public void setBotonseleccionado(BotonPersonalizado botonseleccionado) {
		this.botonseleccionado = botonseleccionado;
	}


	public JFrame get_tecladoPrevisualizado() {
		return _tecladoPrevisualizado;
	}


	public void set_tecladoPrevisualizado(JFrame tecladoPrevisualizado) {
		_tecladoPrevisualizado = tecladoPrevisualizado;
	}


	public TecladoPreview getTeclado() {
		return teclado;
	}


	public void setTeclado(TecladoPreview teclado) {
		this.teclado = teclado;
	}


	public BotonPersonalizado getBotonCopiar() {
		return botonCopiar;
	}


	public void setBotonCopiar(BotonPersonalizado botonCopiar) {
		this.botonCopiar = botonCopiar;
	}


	public BotonPersonalizado getBotonCortar() {
		return botonCortar;
	}


	public void setBotonCortar(BotonPersonalizado botonCortar) {
		this.botonCortar = botonCortar;
	}


	public List<PanelBotonEliminado> getBotonesEliminados() {
		return botonesEliminados;
	}


	public void setBotonesEliminados(List<PanelBotonEliminado> botonesEliminados) {
		this.botonesEliminados = botonesEliminados;
	}


	public PanelBotonEliminado getPanelSeleccionado() {
		return panelSeleccionado;
	}


	public void setPanelSeleccionado(PanelBotonEliminado panelSeleccionado) {
		this.panelSeleccionado = panelSeleccionado;
	}


	public PaginaEntornoCreacion get_frame() {
		return _frame;
	}


	public void set_frame(PaginaEntornoCreacion frame) {
		_frame = frame;
	}


	public Boolean getGuardado() {
		return Guardado;
	}


	public void setGuardado(Boolean guardado) {
		Guardado = guardado;
	}


	public TransicionBotones getPolicy() {
		return policy;
	}


	public void setPolicy(TransicionBotones policy) {
		this.policy = policy;
	}


	public WindowFocusListener getFoco() {
		return foco;
	}


	public void setFoco(WindowFocusListener foco) {
		this.foco = foco;
	}
    
    public void requestFocus(){
    	super.requestFocus();
    	_frame.setFocusTraversalPolicy(policy);
    	this.setFocusTraversalPolicy(policy);
    	_frame.requestFocus();
    }
    
	
}
